package apiRedis;

import com.techindata.cacheredis.RedisConnectionPool;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

import java.util.HashMap;
import java.util.Map;

public class DynamicRedisPoolUtil {

    private static Map<String,JedisPool> jedisPoolMap=new HashMap<String, JedisPool>();
    public static JedisPool getJedisPool(String servIp,String servPort,String redisPasswd){
          JedisPool dynamicpool= jedisPoolMap.get(servIp+"_"+servPort+"_pool");
            if (dynamicpool == null) {
                JedisPoolConfig config = new JedisPoolConfig();
                // 控制一个pool可分配多少个jedis实例，通过pool.getResource()来获取；
                // 如果赋值为-1，则表示不限制；如果pool已经分配了maxActive个jedis实例，则此时pool的状态为exhausted(耗尽)。
                config.setMaxTotal(2000);
                // 控制一个pool最多有多少个状态为idle(空闲的)的jedis实例。
                config.setMaxIdle(1000);
                // 表示当borrow(引入)一个jedis实例时，最大的等待时间，如果超过等待时间，则直接抛出JedisConnectionException；
                config.setMaxWaitMillis(1000 * 100);
                // 在borrow一个jedis实例时，是否提前进行validate操作；如果为true，则得到的jedis实例均是可用的；
                config.setTestOnBorrow(true);
                //增加鉴权
                if(null!=redisPasswd&&!"".equals(redisPasswd)){
                    int timeout = 3000;
                    dynamicpool = new JedisPool(config,servIp,
                            Integer.valueOf(servPort), timeout, redisPasswd);
                }else{
                    dynamicpool = new JedisPool(servIp,Integer.valueOf(servPort));
                }
            }
            return dynamicpool;
    }

    /**
     * 判断key存不存在
     * @param servIp
     * @param servPort
     * @param passwd
     * @param key
     * @return
     */
    public static Boolean keyIsExis(String servIp,String servPort,String passwd ,String key){
        JedisPool pool = DynamicRedisPoolUtil.getJedisPool(servIp,servPort,passwd);
        Jedis jedis = null;
        try {
            jedis = pool.getResource();
            return jedis.exists(key);
        } catch (Exception e) {
            return null;
        }
        finally{
            RedisConnectionPool.returnResource(pool, jedis);
        }
    }

}
